// utils/theme.js - 主题管理工具

/**
 * 主题管理器
 */
class ThemeManager {
  constructor() {
    this.app = getApp();
  }

  /**
   * 获取当前主题
   */
  getCurrentTheme() {
    return this.app.globalData.theme || wx.getStorageSync('theme') || 'dark';
  }

  /**
   * 应用主题到页面
   * @param {Object} pageInstance - 页面实例
   */
  applyTheme(pageInstance) {
    const theme = this.getCurrentTheme();
    
    // 设置页面根元素的class
    if (theme === 'light') {
      // 浅色主题
      wx.setNavigationBarColor({
        frontColor: '#000000',
        backgroundColor: '#ffffff'
      });
      
      // 设置底部导航栏为浅色主题
      wx.setTabBarStyle({
        color: '#6b7280',
        selectedColor: '#15b8a6',
        backgroundColor: '#ffffff',
        borderStyle: 'white'
      });
    } else {
      // 深色主题
      wx.setNavigationBarColor({
        frontColor: '#ffffff',
        backgroundColor: '#0f172a'
      });
      
      // 设置底部导航栏为深色主题
      wx.setTabBarStyle({
        color: '#94a3b8',
        selectedColor: '#15b8a6',
        backgroundColor: '#1e293b',
        borderStyle: 'black'
      });
    }

    // 更新页面数据中的主题状态
    if (pageInstance && pageInstance.setData) {
      pageInstance.setData({
        currentTheme: theme
      });
    }
  }

  /**
   * 监听主题变化
   * @param {Object} pageInstance - 页面实例
   */
  watchThemeChange(pageInstance) {
    // 监听存储变化
    const checkThemeChange = () => {
      const newTheme = wx.getStorageSync('theme') || 'dark';
      if (newTheme !== this.getCurrentTheme()) {
        this.app.globalData.theme = newTheme;
        this.applyTheme(pageInstance);
      }
    };

    // 定期检查主题变化
    const interval = setInterval(checkThemeChange, 1000);
    
    // 返回清理函数
    return () => {
      clearInterval(interval);
    };
  }

  /**
   * 为页面添加主题支持
   * @param {Object} pageOptions - 页面配置对象
   */
  enhancePage(pageOptions) {
    const originalOnLoad = pageOptions.onLoad || function() {};
    const originalOnShow = pageOptions.onShow || function() {};
    const originalOnHide = pageOptions.onHide || function() {};
    const originalOnUnload = pageOptions.onUnload || function() {};

    let themeWatcher = null;

    // 增强onLoad
    pageOptions.onLoad = function(options) {
      // 初始化主题数据
      this.setData({
        currentTheme: themeManager.getCurrentTheme()
      });
      
      // 应用主题
      themeManager.applyTheme(this);
      
      // 开始监听主题变化
      themeWatcher = themeManager.watchThemeChange(this);
      
      // 调用原始onLoad
      originalOnLoad.call(this, options);
    };

    // 增强onShow
    pageOptions.onShow = function() {
      // 重新应用主题
      themeManager.applyTheme(this);
      
      // 调用原始onShow
      originalOnShow.call(this);
    };

    // 增强onHide
    pageOptions.onHide = function() {
      // 调用原始onHide
      originalOnHide.call(this);
    };

    // 增强onUnload
    pageOptions.onUnload = function() {
      // 清理主题监听器
      if (themeWatcher) {
        themeWatcher();
        themeWatcher = null;
      }
      
      // 调用原始onUnload
      originalOnUnload.call(this);
    };

    return pageOptions;
  }
}

// 创建全局实例
const themeManager = new ThemeManager();

// 导出工具函数
export default {
  // 获取当前主题
  getCurrentTheme: () => themeManager.getCurrentTheme(),
  
  // 应用主题到页面
  applyTheme: (pageInstance) => themeManager.applyTheme(pageInstance),
  
  // 监听主题变化
  watchThemeChange: (pageInstance) => themeManager.watchThemeChange(pageInstance),
  
  // 为页面添加主题支持
  enhancePage: (pageOptions) => themeManager.enhancePage(pageOptions)
};

// 兼容CommonJS导出
module.exports = {
  getCurrentTheme: () => themeManager.getCurrentTheme(),
  applyTheme: (pageInstance) => themeManager.applyTheme(pageInstance),
  watchThemeChange: (pageInstance) => themeManager.watchThemeChange(pageInstance),
  enhancePage: (pageOptions) => themeManager.enhancePage(pageOptions)
};